/** 
 * \file   test_facturationFM.c
 * \author ade
 * \author morgane
 * \author heni
 * \brief Interface de declaration des fonctions de test facturationFM
 */

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include "typesprimitifs.h"
#include "FacturationFM.h"
#include "test_facturationFM.h"
#include "fournisseur.h"
#include "commande.h"
#include "produit.h"
#include "categorie.h"

/**
 * Nombres de test reussies.
 */
static ENTIER_POSITIF ok_tests_facturationFM = 0;

/**
 * Nombres de test ayant echoues.
 */
static ENTIER_POSITIF ko_tests_facturationFM = 0;

static POINTEUR_FACTURATIONFM fact = NULL;

void set_up_tests_facturationFM() {
    printf("-------- DEBUT TEST: facturationFM --------\n");
}

void tester_creer_facturationFM() {
    POINTEUR_COMMANDE pc;
    POINTEUR_FOURNISSEUR pfour;
    POINTEUR_PRODUIT pr;

    /* variables concernant le fournisseur*/
    CHAINE nom = "toto";
    ENTIER_POSITIF numero = 2;
    CHAINE rue = "champs";
    ENTIER_POSITIF code_postal = 92000;
    CHAINE ville = "nanterre";
    CHAINE pays = "france";

    /* variable concernant l'ajout d'un produit � une commande*/
    ENTIER_POSITIF quant = 2;

    /*variables concernant le produit*/
    CHAINE np = "Twilight";
    ENTIER_POSITIF qu = 3;
    DOUBLE prix = 10;
    STRING t = "Cinema";
    CATEGORIE cat;

    /* variable necessaire pour la creation de la facture*/
    DOUBLE montant = 20;

    cat = donner_categorie(t);

    /* creation du produit*/
    pr = creer_produit(np, qu, prix, cat);
    /* creation du fournisseur */
    pfour = creer_fournisseur(nom, numero, rue, code_postal, ville, pays);
    /* creation de la commande*/
    pc = creer_commande();
    /* ajout du produit � la commande*/
    ajouter_produit_commande(pr, quant, pc);

    /*creation de la facturation*/
    fact = creer_facturationFM(pfour, montant, pc);

    if (fact != NULL) {
        afficher_facturationFM(fact);
        ok_tests_facturationFM++;
        printf("PASSED: tester_creer_facturationFM\n");
    } else {
        ko_tests_facturationFM++;
        printf("FAILED: tester_creer_facturationFM\n");
    }
    liberer_facturationFM(fact);
}

void tear_down_tests_facturationFM() {
    printf("-------- STATS TESTS FACTURATION FM --------\n");
    printf("Tests reussis: %d\n", ok_tests_facturationFM);
    printf("Tests echoues : %d\n", ko_tests_facturationFM);
    printf("-----------------------------------\n");
    printf("FIN TEST: facturationFM\n");
}

void tests_facturationFM() {
    set_up_tests_facturationFM();
    tester_creer_facturationFM();
    tear_down_tests_facturationFM();
}
